package com.bicon.botu.mall.order.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.bicon.botu.mall.order.dto.OrderDto;
import com.bicon.botu.mall.order.entity.GoodsOrder;
import com.bicon.botu.core.base.common.entity.BaseResult;

/**
 * 订单服务层
 *
 * @auther 裴志鹏
 * @date 2017/7/20 10:03
 */
public interface IGoodsOrderService extends IService<GoodsOrder> {

    /**
     * 提交订单
     *
     * @param userId                   用户id
     * @param orderAmount              订单总金额
     * @param sourceCode               订单来源
     * @param promotionsDiscountIdJson 优惠券id集合
     * @param expressAmount            邮费
     * @param remark                   买家留言
     * @param goodsIdJson              商品id集合  多个商品使用,号分隔
     * @param goodsNameJson            商品名称
     * @param goodsNumberJson          商品数量集合
     * @param skuNameJson              sku名称集合
     * @param itemImageJson            商品列表展示图集合
     * @param goodsPlatformPriceJson   商品价格集合
     * @param name                     收货人
     * @param address                  收货地址
     * @param telephone                联系电话
     * @param flag                     是否从购物车提交订单 0-是 1-否
     * @return
     */
    BaseResult submitOrder(String userId, String orderAmount, String sourceCode, String promotionsDiscountIdJson,
                           String expressAmount, String remark, String goodsIdJson, String goodsNameJson, String goodsNumberJson,
                           String skuNameJson, String itemImageJson, String goodsPlatformPriceJson, String name, String address, String telephone, String flag,String goodsFrom);

    /**
     * 修改订单接口
     *
     * @param orderId      订单id
     * @param actualAmount 实际支付金额
     * @param name         收货人
     * @param address      收货地址
     * @param telephone    联系电话
     * @return
     */
    BaseResult update(String orderId, String actualAmount, String name, String address, String telephone);

    /**
     * 无效
     *
     * @param goodsOrderId 订单id
     * @return
     */
    BaseResult updateByOrderId(String goodsOrderId);

    /**
     * 分页查询订单列表
     *
     * @param pageNo   页码
     * @param pageSize 每页显示数量
     * @return
     */
    Page<OrderDto> findOrderList(int pageNo, int pageSize);

    /**
     * 按类型查询订单列表
     *
     * @param pageNo   页码
     * @param pageSize 每页显示数量
     * @param type     发货、退货、退换货类型
     * @return
     */
    Page<OrderDto> findOrderByPayment(int pageNo, int pageSize, String type);

    /**
     * 取消订单
     *
     * @param orderId      订单id
     * @param userId       用户id
     * @param cancelReason 取消订单原因
     * @return
     */
    BaseResult cancelOrder(String orderId, String userId, String cancelReason);

    /**
     * 删除订单
     *
     * @param orderId 订单id
     * @param userId  用户id
     * @return
     */
    BaseResult deleteOrder(String orderId, String userId);

    /**
     * 我的订单-待付款、代发货、待收货、待评价
     *
     * @param userId  用户id
     * @param status  订单状态
     * @param current 当前页
     * @param size    每页条数
     * @return
     */
    BaseResult myOrder(String userId, String status, int current, int size);


    /**
     * 查询单个订单详情信息
     * @param userId 用户Id
     * @param orderNo 订单id
     * @return
     */
    BaseResult getOrderDetails(String userId,  String orderNo);


    /**
     * 搜索订单
     * @param userId 用户Id
     * @param words 商品名称
     * @return
     */
    BaseResult queryOrderByGoodsName(String userId,String words);
}
